//引入fs模块
import fs from 'fs'

//封装读取文件函数
const myReadFile = url => {
  return new Promise((resolve, reject) => {
    fs.readFile(url, 'utf-8', (err, dataStr) => {
      !err ? resolve(dataStr) : reject(err)
    })
  })
}

const timeOut = url => {
  return new Promise((resolve, reject) => {
    fs.readFile(url, 'utf-8', (err, dataStr) => {
      setTimeout(() => {
        !err ? resolve(dataStr) : reject(err)
      }, 1000)
    })
  })
}

//Promise.all方法可以会发起并行的Promise异步操作，等所有的异步操作结束才执行then函数
//all方法接收一个数组作为参数，只要其中有一个promise结果为rejected则全部失败
//输出一个数组作为结果
Promise.all([myReadFile('./text/1.txt'), timeOut('./text/2.txt'), timeOut('./text/3.txt')]).then(
  res => {
    console.log(res);
  }
)

//Promise.race方法也可以发起并行的Promise异步操作，有一个结束就会执行then函数
//race方法接收一个数组作为参数，
//第一个promise结果为fulfilled则全部成功，第一个promise结果为rejected则全部失败
Promise.race([myReadFile('./text/1.txt'), timeOut('./text/2.txt'), timeOut('./text/3.txt')]).then(
  res => {
    console.log(res);
  }
)
